import CryptoJS from 'crypto-js';
import AES from 'crypto-js/aes.js';

/**
 * 节流函数
 * @param fn 需要节流的函数
 * @param delay 延时毫秒值
 * @returns 返回节流后的函数
 */
export function throttle(fn, delay) {
    let last = 0;
    return function (...args) {
        if (!last || last + delay < new Date().getTime()) {
            last = new Date().getTime();
            fn.apply(this, args);
        }
    };
}


/**
 * 判断是否为null
 * @param {*} val 
 * @returns 
 */
export function isUndef(val) {
    return typeof val === 'undefined'
}
/**
 * 判断是否为null
 * @param {*} val 
 * @returns 
 */
export function isNull(val) {
    return val === null
}

/**
 * 为null或undef
 * @param {*} val 
 * @returns 
 */
export function isNullOrUndef(val) {
    return isNull(val) || isUndef(val)
}



// /**
//  *
//  * @param pwd 加密前密码
//  * @param timestamp 时间戳用于构成 密钥
//  * @param iv 服务端给定的加密向量
//  * @returns 加密后的密码
//  */
// export function cryptoPwd(pwd, timestamp, iv = '3cc2d1d43402754f') {
//     const key = CryptoJS.enc.Utf8.parse(`gsi${timestamp}`);
//     const parsedIv = CryptoJS.enc.Utf8.parse(iv);
//     const encrypted = CryptoJS.AES.encrypt(pwd, key, {
//         iv: parsedIv,
//         mode: CryptoJS.mode.CBC,
//         padding: CryptoJS.pad.Pkcs7
//     });
//     return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
// }


/**
 *
 * @param pwd 加密前密码
 * @param timestamp 时间戳用于构成 密钥
 * @param iv 服务端给定的加密向量
 * @returns 加密后的密码
 */
export function cryptoPwd(pwd, timestamp, iv = '3cc2d1d43402754f') {
    const aesCrypto = AES.encrypt(
        CryptoJS.enc.Utf8.parse(pwd),
        CryptoJS.enc.Utf8.parse(`gsi${timestamp}`),
        {
            iv: CryptoJS.enc.Utf8.parse(iv),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7,
        }
    );

    return CryptoJS.enc.Base64.stringify(aesCrypto.ciphertext);
}
